home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / tcl / tcl70b2.lha / tcl7.0b2 / compat / strerror.c < prev    next >
C/C++ Source or Header  |  1993-05-21  |  12KB  |  483 lines

  1. /* 
  2.  * strerror.c --
  3.  *
  4.  *    Source code for the "strerror" library routine.
  5.  *
  6.  * Copyright (c) 1991-1993 The Regents of the University of California.
  7.  * All rights reserved.
  8.  *
  9.  * Permission is hereby granted, without written agreement and without
  10.  * license or royalty fees, to use, copy, modify, and distribute this
  11.  * software and its documentation for any purpose, provided that the
  12.  * above copyright notice and the following two paragraphs appear in
  13.  * all copies of this software.
  14.  * 
  15.  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
  16.  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  17.  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
  18.  * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  19.  *
  20.  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  21.  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  22.  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  23.  * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
  24.  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  25.  */
  26.  
  27. #ifndef lint
  28. static char rcsid[] = "$Header: /user6/ouster/tcl/compat/RCS/strerror.c,v 1.5 93/05/21 13:59:03 ouster Exp $ SPRITE (Berkeley)";
  29. #endif /* not lint */
  30.  
  31. #include <tclInt.h>
  32. #include <tclUnix.h>
  33.  
  34. /*
  35.  *----------------------------------------------------------------------
  36.  *
  37.  * strerror --
  38.  *
  39.  *    Map an integer error number into a printable string.
  40.  *
  41.  * Results:
  42.  *    The return value is a pointer to a string describing
  43.  *    error.  The first character of string isn't capitalized.
  44.  *
  45.  * Side effects:
  46.  *    Each call to this procedure may overwrite the value returned
  47.  *    by the previous call.
  48.  *
  49.  *----------------------------------------------------------------------
  50.  */
  51.  
  52. char *
  53. strerror(error)
  54.     int error;            /* Integer identifying error (must be
  55.                  * one of the officially-defined Sprite
  56.                  * errors, as defined in errno.h). */
  57. {
  58.     static char msg[50];
  59.  
  60. #ifndef NO_SYS_ERRLIST
  61.     if ((error <= sys_nerr) && (error > 0)) {
  62.     return sys_errlist[error];
  63.     }
  64. #else
  65.     switch (error) {
  66. #ifdef E2BIG
  67.     case E2BIG: return "argument list too long";
  68. #endif
  69. #ifdef EACCES
  70.     case EACCES: return "permission denied";
  71. #endif
  72. #ifdef EADDRINUSE
  73.     case EADDRINUSE: return "address already in use";
  74. #endif
  75. #ifdef EADDRNOTAVAIL
  76.     case EADDRNOTAVAIL: return "can't assign requested address";
  77. #endif
  78. #ifdef EADV
  79.     case EADV: return "advertise error";
  80. #endif
  81. #ifdef EAFNOSUPPORT
  82.     case EAFNOSUPPORT: return "address family not supported by protocol family";
  83. #endif
  84. #ifdef EAGAIN
  85.     case EAGAIN: return "no more processes";
  86. #endif
  87. #ifdef EALIGN
  88.     case EALIGN: return "EALIGN";
  89. #endif
  90. #ifdef EALREADY
  91.     case EALREADY: return "operation already in progress";
  92. #endif
  93. #ifdef EBADE
  94.     case EBADE: return "bad exchange descriptor";
  95. #endif
  96. #ifdef EBADF
  97.     case EBADF: return "bad file number";
  98. #endif
  99. #ifdef EBADFD
  100.     case EBADFD: return "file descriptor in bad state";
  101. #endif
  102. #ifdef EBADMSG
  103.     case EBADMSG: return "not a data message";
  104. #endif
  105. #ifdef EBADR
  106.     case EBADR: return "bad request descriptor";
  107. #endif
  108. #ifdef EBADRPC
  109.     case EBADRPC: return "RPC structure is bad";
  110. #endif
  111. #ifdef EBADRQC
  112.     case EBADRQC: return "bad request code";
  113. #endif
  114. #ifdef EBADSLT
  115.     case EBADSLT: return "invalid slot";
  116. #endif
  117. #ifdef EBFONT
  118.     case EBFONT: return "bad font file format";
  119. #endif
  120. #ifdef EBUSY
  121.     case EBUSY: return "mount device busy";
  122. #endif
  123. #ifdef ECHILD
  124.     case ECHILD: return "no children";
  125. #endif
  126. #ifdef ECHRNG
  127.     case ECHRNG: return "channel number out of range";
  128. #endif
  129. #ifdef ECOMM
  130.     case ECOMM: return "communication error on send";
  131. #endif
  132. #ifdef ECONNABORTED
  133.     case ECONNABORTED: return "software caused connection abort";
  134. #endif
  135. #ifdef ECONNREFUSED
  136.     case ECONNREFUSED: return "connection refused";
  137. #endif
  138. #ifdef ECONNRESET
  139.     case ECONNRESET: return "connection reset by peer";
  140. #endif
  141. #if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK))
  142.     case EDEADLK: return "resource deadlock avoided";
  143. #endif
  144. #ifdef EDEADLOCK
  145.     case EDEADLOCK: return "resource deadlock avoided";
  146. #endif
  147. #ifdef EDESTADDRREQ
  148.     case EDESTADDRREQ: return "destination address required";
  149. #endif
  150. #ifdef EDIRTY
  151.     case EDIRTY: return "mounting a dirty fs w/o force";
  152. #endif
  153. #ifdef EDOM
  154.     case EDOM: return "math argument out of range";
  155. #endif
  156. #ifdef EDOTDOT
  157.     case EDOTDOT: return "cross mount point";
  158. #endif
  159. #ifdef EDQUOT
  160.     case EDQUOT: return "disk quota exceeded";
  161. #endif
  162. #ifdef EDUPPKG
  163.     case EDUPPKG: return "duplicate package name";
  164. #endif
  165. #ifdef EEXIST
  166.     case EEXIST: return "file already exists";
  167. #endif
  168. #ifdef EFAULT
  169.     case EFAULT: return "bad address in system call argument";
  170. #endif
  171. #ifdef EFBIG
  172.     case EFBIG: return "file too large";
  173. #endif
  174. #ifdef EHOSTDOWN
  175.     case EHOSTDOWN: return "host is down";
  176. #endif
  177. #ifdef EHOSTUNREACH
  178.     case EHOSTUNREACH: return "host is unreachable";
  179. #endif
  180. #ifdef EIDRM
  181.     case EIDRM: return "identifier removed";
  182. #endif
  183. #ifdef EINIT
  184.     case EINIT: return "initialization error";
  185. #endif
  186. #ifdef EINPROGRESS
  187.     case EINPROGRESS: return "operation now in progress";
  188. #endif
  189. #ifdef EINTR
  190.     case EINTR: return "interrupted system call";
  191. #endif
  192. #ifdef EINVAL
  193.     case EINVAL: return "invalid argument";
  194. #endif
  195. #ifdef EIO
  196.     case EIO: return "I/O error";
  197. #endif
  198. #ifdef EISCONN
  199.     case EISCONN: return "socket is already connected";
  200. #endif
  201. #ifdef EISDIR
  202.     case EISDIR: return "illegal operation on a directory";
  203. #endif
  204. #ifdef EISNAME
  205.     case EISNAM: return "is a name file";
  206. #endif
  207. #ifdef ELBIN
  208.     case ELBIN: return "ELBIN";
  209. #endif
  210. #ifdef EL2HLT
  211.     case EL2HLT: return "level 2 halted";
  212. #endif
  213. #ifdef EL2NSYNC
  214.     case EL2NSYNC: return "level 2 not synchronized";
  215. #endif
  216. #ifdef EL3HLT
  217.     case EL3HLT: return "level 3 halted";
  218. #endif
  219. #ifdef EL3RST
  220.     case EL3RST: return "level 3 reset";
  221. #endif
  222. #ifdef ELIBACC
  223.     case ELIBACC: return "can not access a needed shared library";
  224. #endif
  225. #ifdef ELIBBAD
  226.     case ELIBBAD: return "accessing a corrupted shared library";
  227. #endif
  228. #ifdef ELIBEXEC
  229.     case ELIBEXEC: return "can not exec a shared library directly";
  230. #endif
  231. #ifdef ELIBMAX
  232.     case ELIBMAX: return
  233.         "attempting to link in more shared libraries than system limit";
  234. #endif
  235. #ifdef ELIBSCN
  236.     case ELIBSCN: return ".lib section in a.out corrupted";
  237. #endif
  238. #ifdef ELNRNG
  239.     case ELNRNG: return "link number out of range";
  240. #endif
  241. #ifdef ELOOP
  242.     case ELOOP: return "too many levels of symbolic links";
  243. #endif
  244. #ifdef EMFILE
  245.     case EMFILE: return "too many open files";
  246. #endif
  247. #ifdef EMLINK
  248.     case EMLINK: return "too many links";
  249. #endif
  250. #ifdef EMSGSIZE
  251.     case EMSGSIZE: return "message too long";
  252. #endif
  253. #ifdef EMULTIHOP
  254.     case EMULTIHOP: return "multihop attempted";
  255. #endif
  256. #ifdef ENAMETOOLONG
  257.     case ENAMETOOLONG: return "file name too long";
  258. #endif
  259. #ifdef ENAVAIL
  260.     case ENAVAIL: return "not available";
  261. #endif
  262. #ifdef ENET
  263.     case ENET: return "ENET";
  264. #endif
  265. #ifdef ENETDOWN
  266.     case ENETDOWN: return "network is down";
  267. #endif
  268. #ifdef ENETRESET
  269.     case ENETRESET: return "network dropped connection on reset";
  270. #endif
  271. #ifdef ENETUNREACH
  272.     case ENETUNREACH: return "network is unreachable";
  273. #endif
  274. #ifdef ENFILE
  275.     case ENFILE: return "file table overflow";
  276. #endif
  277. #ifdef ENOANO
  278.     case ENOANO: return "anode table overflow";
  279. #endif
  280. #if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR))
  281.     case ENOBUFS: return "no buffer space available";
  282. #endif
  283. #ifdef ENOCSI
  284.     case ENOCSI: return "no CSI structure available";
  285. #endif
  286. #ifdef ENODATA
  287.     case ENODATA: return "no data available";
  288. #endif
  289. #ifdef ENODEV
  290.     case ENODEV: return "no such device";
  291. #endif
  292. #ifdef ENOENT
  293.     case ENOENT: return "no such file or directory";
  294. #endif
  295. #ifdef ENOEXEC
  296.     case ENOEXEC: return "exec format error";
  297. #endif
  298. #ifdef ENOLCK
  299.     case ENOLCK: return "no locks available";
  300. #endif
  301. #ifdef ENOLINK
  302.     case ENOLINK: return "link has be severed";
  303. #endif
  304. #ifdef ENOMEM
  305.     case ENOMEM: return "not enough memory";
  306. #endif
  307. #ifdef ENOMSG
  308.     case ENOMSG: return "no message of desired type";
  309. #endif
  310. #ifdef ENONET
  311.     case ENONET: return "machine is not on the network";
  312. #endif
  313. #ifdef ENOPKG
  314.     case ENOPKG: return "package not installed";
  315. #endif
  316. #ifdef ENOPROTOOPT
  317.     case ENOPROTOOPT: return "bad proocol option";
  318. #endif
  319. #ifdef ENOSPC
  320.     case ENOSPC: return "no space left on device";
  321. #endif
  322. #ifdef ENOSR
  323.     case ENOSR: return "out of stream resources";
  324. #endif
  325. #ifdef ENOSTR
  326.     case ENOSTR: return "not a stream device";
  327. #endif
  328. #ifdef ENOSYM
  329.     case ENOSYM: return "unresolved symbol name";
  330. #endif
  331. #ifdef ENOSYS
  332.     case ENOSYS: return "function not implemented";
  333. #endif
  334. #ifdef ENOTBLK
  335.     case ENOTBLK: return "block device required";
  336. #endif
  337. #ifdef ENOTCONN
  338.     case ENOTCONN: return "socket is not connected";
  339. #endif
  340. #ifdef ENOTDIR
  341.     case ENOTDIR: return "not a directory";
  342. #endif
  343. #ifdef ENOTEMPTY
  344.     case ENOTEMPTY: return "directory not empty";
  345. #endif
  346. #ifdef ENOTNAM
  347.     case ENOTNAM: return "not a name file";
  348. #endif
  349. #ifdef ENOTSOCK
  350.     case ENOTSOCK: return "socket operation on non-socket";
  351. #endif
  352. #ifdef ENOTTY
  353.     case ENOTTY: return "inappropriate device for ioctl";
  354. #endif
  355. #ifdef ENOTUNIQ
  356.     case ENOTUNIQ: return "name not unique on network";
  357. #endif
  358. #ifdef ENXIO
  359.     case ENXIO: return "no such device or address";
  360. #endif
  361. #ifdef EOPNOTSUPP
  362.     case EOPNOTSUPP: return "operation not supported on socket";
  363. #endif
  364. #ifdef EPERM
  365.     case EPERM: return "not owner";
  366. #endif
  367. #ifdef EPFNOSUPPORT
  368.     case EPFNOSUPPORT: return "protocol family not supported";
  369. #endif
  370. #ifdef EPIPE
  371.     case EPIPE: return "broken pipe";
  372. #endif
  373. #ifdef EPROCLIM
  374.     case EPROCLIM: return "too many processes";
  375. #endif
  376. #ifdef EPROCUNAVAIL
  377.     case EPROCUNAVAIL: return "bad procedure for program";
  378. #endif
  379. #ifdef EPROGMISMATCH
  380.     case EPROGMISMATCH: return "program version wrong";
  381. #endif
  382. #ifdef EPROGUNAVAIL
  383.     case EPROGUNAVAIL: return "RPC program not available";
  384. #endif
  385. #ifdef EPROTO
  386.     case EPROTO: return "protocol error";
  387. #endif
  388. #ifdef EPROTONOSUPPORT
  389.     case EPROTONOSUPPORT: return "protocol not suppored";
  390. #endif
  391. #ifdef EPROTOTYPE
  392.     case EPROTOTYPE: return "protocol wrong type for socket";
  393. #endif
  394. #ifdef ERANGE
  395.     case ERANGE: return "math result unrepresentable";
  396. #endif
  397. #if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED))
  398.     case EREFUSED: return "EREFUSED";
  399. #endif
  400. #ifdef EREMCHG
  401.     case EREMCHG: return "remote address changed";
  402. #endif
  403. #ifdef EREMDEV
  404.     case EREMDEV: return "remote device";
  405. #endif
  406. #ifdef EREMOTE
  407.     case EREMOTE: return "pathname hit remote file system";
  408. #endif
  409. #ifdef EREMOTEIO
  410.     case EREMOTEIO: return "remote i/o error";
  411. #endif
  412. #ifdef EREMOTERELEASE
  413.     case EREMOTERELEASE: return "EREMOTERELEASE";
  414. #endif
  415. #ifdef EROFS
  416.     case EROFS: return "read-only file system";
  417. #endif
  418. #ifdef ERPCMISMATCH
  419.     case ERPCMISMATCH: return "RPC version is wrong";
  420. #endif
  421. #ifdef ERREMOTE
  422.     case ERREMOTE: return "object is remote";
  423. #endif
  424. #ifdef ESHUTDOWN
  425.     case ESHUTDOWN: return "can't send afer socket shutdown";
  426. #endif
  427. #ifdef ESOCKTNOSUPPORT
  428.     case ESOCKTNOSUPPORT: return "socket type not supported";
  429. #endif
  430. #ifdef ESPIPE
  431.     case ESPIPE: return "invalid seek";
  432. #endif
  433. #ifdef ESRCH
  434.     case ESRCH: return "no such process";
  435. #endif
  436. #ifdef ESRMNT
  437.     case ESRMNT: return "srmount error";
  438. #endif
  439. #ifdef ESTALE
  440.     case ESTALE: return "stale remote file handle";
  441. #endif
  442. #ifdef ESUCCESS
  443.     case ESUCCESS: return "Error 0";
  444. #endif
  445. #ifdef ETIME
  446.     case ETIME: return "timer expired";
  447. #endif
  448. #ifdef ETIMEDOUT
  449.     case ETIMEDOUT: return "connection timed out";
  450. #endif
  451. #ifdef ETOOMANYREFS
  452.     case ETOOMANYREFS: return "too many references: can't splice";
  453. #endif
  454. #ifdef ETXTBSY
  455.     case ETXTBSY: return "text file or pseudo-device busy";
  456. #endif
  457. #ifdef EUCLEAN
  458.     case EUCLEAN: return "structure needs cleaning";
  459. #endif
  460. #ifdef EUNATCH
  461.     case EUNATCH: return "protocol driver not attached";
  462. #endif
  463. #ifdef EUSERS
  464.     case EUSERS: return "too many users";
  465. #endif
  466. #ifdef EVERSION
  467.     case EVERSION: return "version mismatch";
  468. #endif
  469. #if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN))
  470.     case EWOULDBLOCK: return "operation would block";
  471. #endif
  472. #ifdef EXDEV
  473.     case EXDEV: return "cross-domain link";
  474. #endif
  475. #ifdef EXFULL
  476.     case EXFULL: return "message tables full";
  477. #endif
  478.     }
  479. #endif /* ! NO_SYS_ERRLIST */
  480.     sprintf(msg, "unknown error (%d)", error);
  481.     return msg;
  482. }
  483.